﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ObviousCode.Aspect.PluginLibrary.Descriptors;
using ObviousCode.Common.Utils.Library;

namespace ObviousCode.Aspect.PluginLibrary.Interfaces
{
    public interface ISurfaceRelationshipFactory
    {
        void Setup();
        void TearDown();

        ISurfaceRelationship BuildRelationship(IAspectItem source, IAspectItem destination, string key);
        void RegisterRelationshipBuilderCallback(string key, Func<Pair<IAspectItem, IAspectItem>, object[], IAspectRelationship> callback);



        void RegisterSurfaceRelationshipDescriptor(string key, SurfaceRelationshipDescriptor surfaceRelationshipDescriptor);
    }

    public interface ISurfaceRelationshipFactory<T> : ISurfaceRelationshipFactory where T : ISurfaceRelationship {}
}
